home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PCMania 44
/
PCMania CD44_1.iso
/
pcmania
/
treal44
/
aviles
/
3dbasics.h
< prev
next >
Wrap
C/C++ Source or Header
|
1996-04-07
|
5KB
|
155 lines
/******************************************************************
**
**
** Versión 3DBasics Diciembre 1995
** Revisión de la base de datos
**
** Copyright: Francisco Javier Avilés Navarro 1995
**
** Intento de superar la barrera de los 60000 tr/seg en un
** 486 DX2 66 Mhz sin hardware adicional
**
** ---------------------------------------------------------
**
** I'm trying to reach the 60000-tr-sec's barrel in a DX266
**
*******************************************************************/
#include <math.h>
#ifdef GNU_C
#include <grx.h>
#include <mousex.h>
#elif BORLAND_C
#include <graphics.h>
#include <mem.h>
#include <dos.h>
#endif
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define DOBLETPANTX 640
#define DOBLETPANTY 340
#define MAXPANTX 640
#define MAXPANTY 410
#define LONGBUFZ LARGOZOB*2
#ifdef GNU_C
extern GrContext *Donde_dibujo,*Lo_que_muestro;
extern MouseEvent evt;
#endif
extern char far *dir;
extern int total,totol;
#ifdef TEXTURAS
extern char far texturasPCX[TAMPCX];
#endif
typedef struct triangulo {
double normal[3];
short color,s_color,tipo;
short representado; /* a 0 si no-rep,1 si si-rep*/
struct Xon *on_first[4]; /*para señalar correctam*/
struct triangulo *siguiente;
char *textura;
};
typedef struct enlaceXon{
struct triangulo *sig;
struct enlaceXon *enlazado;
};
typedef struct Xon {
struct enlaceXon *lista,*ultimo_lista;
short indice,xp,yp;
double x,y,z;
double normal[3];
int xo[3];
struct CUERPO *propietario;
struct Xon *anterior,*siguiente;
struct Xon *anteriorZ,*siguienteZ;
struct Xon *siguienteCuerpo;
};
typedef struct CUERPO{
struct Xon *first,*en_curso;
struct triangulo *trfirst,*trlast;
double kd,ke;
/* double coeficientes[3][16];
char nombre[20];*/
};
typedef struct luz_lejana{
double direccion[3];
};
struct luz_lejana LUZ_LEJANA;
typedef struct luz_cercana{
double direccion[3];
double punto[3];
double distancia,apertura_luz;
};
struct luz_cercana LUZ_CERCANA;
extern char *basura,*basura_un,*al_vector_un;
extern double trans_mat [3][3],comodin[3][3];
extern struct Xon *x0un [2];
extern struct Xon *z0ob [LONGBUFZ];
extern int contropant,contro_vector_un; /** controladores de estado de dispositivos **/
extern int MaxX,MaxY;
extern struct Xon *unx,*otrox;
extern struct Xon *unz,*otroz;
extern struct triangulo *TRIANG;
#ifdef STEREO
extern int izqdo;
#endif
extern int visx,visy,visz,mix,miy,miz; /* Estas variables son las coordernadas
del punto de vista y el de mira */
extern int xmin,xmax,ymax,ymin,zmax,zmin; /* Coordenadas del cubo de visión */
extern int neary; /**** Distancia hasta la pantalla desde el ojo */
extern int Z,X;
extern int evaluador;
#ifdef GNU_C
void Initialize(int modo,int tam_buf_obs,int tam_buf_un,int tam_buf_vu);
#elif BORLAND_C
void Initialize(int busca,int modo,unsigned long tam_buf_obs,unsigned long tam_buf_un,unsigned long tam_buf_vu);
#endif
void multmat (double matriz1[3][3],double matriz2[3][3]);
void multvec(int matriz1[3],double matriz2[3][3]);
void multvect(double matriz1[3],double matriz2[3][3]);
void lookat(int vx,int vy,int vz,int px,int py,int pz,int twist);
void perspective(double fovy,double aspect,long cercano,long lejano);
void a_observador(void);
void coloca_punto (int x_on,int y_on,int z_on,struct triangulo *donde,int num_vert,struct CUERPO *);
struct triangulo * forma_tetrangulo (double punto_1[3],double punto_2[3],double punto_3[3],double punto_4[3],int color,int textur,char *s,struct CUERPO *quien);
void a_pantalla(void);
void a_pantalla_plano(void);
void a_pantalla_phong(void);
struct triangulo *forma_recta (double punto_1[3],double punto_2[3],int color,struct CUERPO *quien);
struct triangulo *forma_punto (double punto_1[3],int color,struct CUERPO *quien);
void forma_superf_ab (struct superab *surfab);
void rota_tetrangs(struct CUERPO *DIR_TR2,int p1[3],int p2[3],double ANG,int);
void trans_tetrangs(struct CUERPO *DIR_TR2,double tx,double ty,double tz);
void trans(struct triangulo *DIR_TR2,double tx,double ty,double tz);
void trans_copy(struct CUERPO *origen,struct CUERPO *dest,
double tx,double ty,double tz);
void cerrar_sistema();
int sentido();
void promedia_normales(struct CUERPO *quien);
void Manage();
int getPCX (char *argv,char far *donde,unsigned int lugar_en_paleta,int *anchura,int *altura);
#ifdef RV
extern double ang_cenital;
extern double ang_z;
extern double radio;
int control_key(int AEREO,int radio_max);
#endif
#ifdef STEREO
void stereo();
#endif
void grabar_como_RAX(char *ss);